<?php

class ErrorController extends Zend_Controller_Action {

    public function preDispatch() {
        // Autenticacion del usuario
        $auth = Zend_Auth::getInstance();
        if (!$auth->hasIdentity()) {
            $this->_helper->layout->disableLayout();
            $this->_forward("index", "index", "");
        } else {
            $identity = $auth->getIdentity();
            if ($identity['tipo_usuario'] != VirtualLabs_Admin_Usuario::ROL_ADMIN) {
                $this->_helper->layout->disableLayout();
                $this->_redirect('/');
            }
        }
        //fin de la autenicacion del usuario
    }
    
    public function unauthorizedAction() {
        $this->view->urlDashboard = $this->getParam('url');
    }

    public function errorAction() {
        $this->_helper->layout->disableLayout();
        $errors = $this->_getParam('error_handler');

        if (!$errors || !$errors instanceof ArrayObject) {
            $this->view->message = 'You have reached the error page';
            return;
        }

        switch ($errors->type) {
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ROUTE:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_CONTROLLER:
            case Zend_Controller_Plugin_ErrorHandler::EXCEPTION_NO_ACTION:
                // 404 error -- controller or action not found
                $this->getResponse()->setHttpResponseCode(404);
                $priority = Zend_Log::NOTICE;
                $this->view->message = 'Page not found';
                break;
            default:
                // application error
                $this->getResponse()->setHttpResponseCode(500);
                $priority = Zend_Log::CRIT;
                $this->view->message = 'Application error';
                break;
        }

        // Log exception, if logger available
        if ($log = $this->getLog()) {
            $log->log($this->view->message, $priority, $errors->exception);
            $log->log('Request Parameters', $priority, $errors->request->getParams());
        }

        // conditionally display exceptions
        if ($this->getInvokeArg('displayExceptions') == true) {
            $this->view->exception = $errors->exception;
        }

        $this->view->request = $errors->request;
    }

    public function getLog() {
        $bootstrap = $this->getInvokeArg('bootstrap');
        if (!$bootstrap->hasResource('Log')) {
            return false;
        }
        $log = $bootstrap->getResource('Log');
        return $log;
    }
    
    public function gobackAction () {
        $auth = Zend_Auth::getInstance();
        $identity = $auth->getIdentity();                
        switch ($identity['tipo_usuario']) {
            case VirtualLabs_Admin_Usuario::ROL_ALUMNO:
                $this->forward('index', 'dashboard', 'academico');
                break;
            case VirtualLabs_Admin_Usuario::ROL_PROFESOR:
                $this->forward('index', 'dashboard', 'academico');
                break;
            case VirtualLabs_Admin_Usuario::ROL_ADMIN:             
                $this->forward('index', 'dashboard', 'admin');;
                break;
            default:
                 $this->_forward("index", "login", "academico");
                break;
        }
    }

}

